【SQL初級編6】UNIONを使ってSQL文同士を結合させよう 您所在的位置:网站首页 sql union join 【SQL初級編6】UNIONを使ってSQL文同士を結合させよう

【SQL初級編6】UNIONを使ってSQL文同士を結合させよう

#【SQL初級編6】UNIONを使ってSQL文同士を結合させよう| 来源: 网络整理| 查看: 265

本記事では、UNIONについて解説します。

前回はサブクエリについて解説しました。

今回では、UNIONで複数のSQL文を繋げる方法についてみていきましょう。

SQLのUNIONとは?SQLのUNIONの使い方UNIONで検索結果を統合するUNION ALLで検索結果を統合するINTERSECTで和集合を取得する(MySQL不可)EXCEPTで差集合を取得する(MySQL不可)まとめ SQLのUNIONとは?

UNIONとは、2つのSQL文をつなぐことができるもののことです。

UNIONを使うことで、複数のSQL文の処理結果を合わせて表示することができるようになります。

また、UNIONの他にUNION ALLというものもあります。

UNIONは処理結果から重複したものを除外するのに対し、UNION ALLは重複したものはそのまま表示します。

SQLのUNIONの使い方

UNIONの具体的な使い方についてみていきましょう。

次の項目に従って解説していきます。

UNIONで検索結果を統合するUNION ALLで検索結果を統合する

なお、今回は『SQL入門編1』で作成したテーブルを使って解説します。『SQL入門編1』で演習用のテーブルを作っていない方は、【SQL入門編1】初心者必見!SQLのクエリの書き方を学ぼうを読んで予め作成してくださいね。

UNIONで検索結果を統合する

UNIONで検索結果を統合するやり方を解説します。

まずUNIONで統合する前のSQL文をみていきます。

○コード例

SELECT name FROM TEST.Student WHERE name = "佐藤";

○実行結果

○コード例

SELECT name FROM TEST.Student WHERE name = "鈴木";

○実行結果

こちら2つのSQL文はnameが「佐藤」のもの、「鈴木」のもののレコードをそれぞれ取得しています。

こちら2つのSQL文を、UNIONで統合してみます。

○コード例

SELECT name FROM TEST.Student WHERE name = "佐藤" UNION SELECT name FROM TEST.Student WHERE name = "鈴木";

○実行結果

2つのSQLの実行結果が合わさって表示されました。

このようにUNIONは2つの表を統合して表示してくれるものです。

UNION ALLで検索結果を統合する

UNIONの他に、UNION ALLというものもあります。

UNIONと同様2つの表を統合するものですが、UNION ALLの場合重複箇所もそのまま表示します。

○コード例

SELECT name FROM TEST.Student WHERE age = 9 UNION ALL SELECT name FROM TEST.Student WHERE name = "鈴木";

○実行結果

上記のコードは「age=9」のレコードと「name=”鈴木”」のレコードをそれぞれ取得し、UNION ALLにて表示しています。

ただ実行結果をみて分かる通り、重複してそのまま表示していますね。

このようにUNION ALLは重複する箇所もそのまま表示するのが特徴です。

UNIONとUNION ALLは状況に応じて使い分けるようにしましょう。

INTERSECTで和集合を取得する(MySQL不可)

UNIONとUNION ALL以外にも、SQL文同士を結合させられるものはあります。

INTERSECTを使うことで、それぞれの実行結果の和集合を取得することが可能です。

和集合とは、2つの重複している箇所、のことを言います。

INTERSECTの具体的な使い方をみていきましょう。

○コード例(SQliteによる実行)

SELECT name FROM Student WHERE gender = "女" INTERSECT SELECT name FROM Student WHERE id = 3;

○実行結果

上記のコードは「gender=”女”」に該当するものと「id=3」に該当するものの、和集合を取得しています。

このようにINTERSECTを使うことで、2つのSQL文の実行結果の中で、重複するものだけ取り出せます。

ただし、INTERSECTは残念ながらMySQLではサポート対象外となっており、使うことができません。

EXCEPTで差集合を取得する(MySQL不可)

つづいて、EXCEPTをみていきます。

EXCEPTを使うことで、それぞれの実行結果の差集合を取得することが可能です。

差集合とは、Aに含まれるがBに含まれない箇所、のことを言います。

EXCEPTの具体的な使い方をみていきましょう。

○コード例(SQliteによる実行)

SELECT name FROM Student WHERE gender = "女" EXCEPT SELECT name FROM Student WHERE id = 3;

○実行結果

上記のコードは「gender=”女”」に該当するものと「id=3」に該当するものの、差集合を取得しています。

「gender=”女”」に該当するものをA、「id=3」に該当するものをBとして考え、Aに該当するが、Bに該当しないものだけ表示しています。

このように、EXCEPTを使うことで、差集合を取得することが可能です。

EXCEPTもINTERSECT同様、MySQLなど一部のRDBMSでは使用できないので、注意しましょう。

まとめ

本記事では、UNIONついて解説しました。

UNIONによって複数のSQL文を繋げられることが、お分かり頂けたかと思います。

UNION以外にも、INTERSECTやEXCEPTなどを使うことで、和集合や差集合が取得可能です。

ただし、INTERSECTやEXCEPTはMySQLではサポートされていないので注意しましょう。

次回は、INNER JOINを解説していきます。

SQL入門・学習コンテンツ一覧CANITのSQL学習ページをまとめたページです。ブックマークに登録しておくと便利です。www.canit.jp2022.09.09 ❤内容は役に立ちましたか?皆さまのご意見が励みになります☺YesNo


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有